from typing import Callable
from abc import abstractmethod, ABCMeta


class ProjectTemplateTransformer(metaclass=ABCMeta):
    """
    ProjectTemplateTransformer是所有的转换器的基类
    转换器的作用是为了将preTemplate.json转换为finalTemplate.json，以便于可以生成视频模板
    """
    @abstractmethod
    def transform(self, preTemplateJson: str,
                  handler: Callable[[str], str]) -> str: ...
    """
    transform方法是所有转换器必须实现的方法
    :param preTemplateJson: 预处理的模板json
    :param handler: 处理函数，用于处理转换后的json 这个函数根据不同的平台进行定义 如果是剪映 那么就定义
    从preTemplate.json转换为剪映的finalTemplate.json
    :return: 转换后的json
    """

    def __str__(self) -> str:
        return f"{self.__class__.__name__}()"
